// vuex的权限模块
import { constantRoutes } from '@/router'
// vuex中的permission模块用来存放当前的 静态路由 + 当前用户的 权限路由
import Layout from '@/layout'
const _import = require('@/router/_import_' + process.env.NODE_ENV) // 获取组件的方法
// 递归处理动态路由
function getADynamicRoute(permission, pid) {
  const routes = []
  const arr = ['system/config', 'system/loginlog', 'subject/subject', 'subject/directory', 'subject/tag', 'class/class', 'class/student', 'exam/question', 'exam/paper', 'exam/exam', 'content/word', 'content/inerview', 'content/cate', 'content/content', 'permission/menu', 'permission/role', 'permission/user', 'layout']
  permission.forEach(item => {
    if (!arr.includes(item.component)) {
      return
    }
    if (item.hidden === 2) return
    if (item.type === 1 && item.parent_id === pid) {
      const obj = {}
      obj.path = item.route
      obj.name = item.permission_mark
      console.log(item.component)
      if (item.component === 'layout') {
        obj.component = Layout
      } else {
        obj.component = _import(item.component)
      }
      obj.meta = {
        title: item.permission_name,
        icon: item.icon
      }
      const children = getADynamicRoute(permission, item.id)
      // obj.children = children
      children.length ? obj.children = children : false
      routes.push(obj)
    }
  })

  return routes
}

const state = {
  routes: constantRoutes, // 所有人默认拥有静态路由
  buttonAuthority: []
}
const mutations = {
  // newRoutes可以认为是 用户登录 通过权限所得到的动态路由的部分
  setRoutes(state, newRoutes) {
    // 下面这么写不对 不是语法不对 是业务不对
    // state.routes = [...newRoutes]
    // 有一种情况  张三 登录 获取了动态路由 追加到路由上  李四登录 4个动态路由
    // 应该是每次更新 都应该在静态路由的基础上进行追加
    // state.routes = state.routes.concat(newRoutes)
    state.routes = [constantRoutes, ...newRoutes]
  },
  setbuttonAuthority(state, data) {
    state.buttonAuthority = data
  }
}
const actions = {
  // 过滤器对应的动态路由
  filterRoutes({ commit }, menus) {
    // console.log(menus)
    // 动态路由数据
    const permission_menu = menus[0]
    // 按钮权限数据
    const permission_btn = menus[1]
    // 动态路由
    const accessedRoutes = getADynamicRoute(permission_menu, 0)
    // asyncRoutes 本地完整的动态路由
    // ////////////////////////////////////////////////////////////////////
    // 1. 情况1是后端返回路由的标识，和本地的完整动态路由进行筛选，找出用户属于的动态路由
    // 2. 情况2是后端直接返回完整的该用户的动态路由，我们需要处理成能用的形式

    // 下面的代码是后端返回标识和路由的name进行匹配！
    // menus 登录后，获取的用户资料中的当前用户对应的角色所拥有的权限标识！
    // menus的案例数==> ["employees","settings","permissions",...]
    // 根据 menus 去 完整的本地的动态路由中 过滤出属于他的动态路由
    // const routes = []
    // menus.forEach(key => {
    //   routes.push(...asyncRoutes.filter(item => item.name === key))
    // })
    // ////////////////////////////////////////////////////////////////////
    // 修改  state中的  routes
    console.log(accessedRoutes)
    commit('setRoutes', accessedRoutes)
    commit('setbuttonAuthority', permission_btn)
    console.log('----------------------------------')
    console.log(accessedRoutes)
    return accessedRoutes
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
